package com.lpf.example.example06.server;

import com.lpf.example.example06.MyDataInfo;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.handler.codec.protobuf.ProtobufEncoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder;
import io.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender;

public class TestServerInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

        ChannelPipeline pipeline = ch.pipeline();

        // 针对Protobuf netty提供了四个处理器
        pipeline.addLast(new ProtobufVarint32FrameDecoder())
                // 解码器：将Protobuf构造出来的字节数组转换成真正的对象。
                // ProtobufDecoder(MessageLite prototype)：MessageLite为用于传输的数据类型。
                // 这里有个问题：这里的消息类型写死了，如果再发送其他类型的消息就不行了，怎么解决？
                .addLast(new ProtobufDecoder(MyDataInfo.Person.getDefaultInstance()))
                .addLast(new ProtobufVarint32LengthFieldPrepender())
                .addLast(new ProtobufEncoder())

                .addLast(new TestServerHandler());
    }
}
